#include <kuai/misc/error.hpp>
#include <kuai/misc/job.hpp>
#include <kuai/db/trajdb.hpp>
#include <kuai/db/moldb.hpp>
#include <kuai/sim/simjob.hpp>

#include <kuai/test/testINCHI.hpp>

#include "test.hpp"


int main(int argc, char* argv[]) {
	
	REGISTER_JOB_CREATOR(kuai::DumpTableJob);

	REGISTER_JOB_CREATOR(kuai::ParseTrajectoryJob);
	REGISTER_JOB_CREATOR(kuai::TraceMolLifeJob);
	REGISTER_JOB_CREATOR(kuai::TraceReactionJob);
	REGISTER_JOB_CREATOR(kuai::ParseReactionGraph);

	REGISTER_JOB_CREATOR(kuai::InchiJob);
	REGISTER_JOB_CREATOR(kuai::ImportSDFJob);
	REGISTER_JOB_CREATOR(kuai::ImportRDFJob);
	REGISTER_JOB_CREATOR(kuai::QueryTinymolJob);
	
	// REGISTER_JOB_CREATOR(kuai::SimulationJob);
	// REGISTER_JOB_CREATOR(kuai::AnalyzeJob);

	std::ifstream stream;
	std::streambuf* buf = std::cin.rdbuf();
	if (argc > 1) {
		stream.open(argv[1]);
		std::cin.rdbuf(stream.rdbuf());
	}

	try {
		kuai::JobManager::getInstance().parse(std::cin, std::cout, std::cerr);
	}
	catch (std::exception& error) {
		kuai::dumpError(error);
	}

	std::cin.rdbuf(buf);
}
